﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MarvellousWorks.PracticalPatternNet8.Concept.Delegating;

/// <summary>
/// AsyncInvoker 类用于演示定时异步回调的用法。
/// 通过 Timer 定时器定期执行回调方法，并记录回调信息。
/// </summary>
public class AsyncInvoker
{
    // 用于记录异步执行的结果信息。
    private IList<string> output = new List<string>();

    /// <summary>
    /// 构造函数，初始化两个定时器，分别以不同的时间间隔触发回调。
    /// </summary>
    public AsyncInvoker()
    {
        // 创建一个每2.5秒触发一次的定时器，回调方法为 OnTimeInterval，状态为 "slower"
        Timer slower = new Timer(new TimerCallback(OnTimeInterval!), "slower", 2500, 2500);
        // 创建一个每2秒触发一次的定时器，回调方法为 OnTimeInterval，状态为 "faster"
        Timer faster = new Timer(OnTimeInterval!, "faster", 2000, 2000);
        // 记录对象创建信息
        output.Add("AsyncInvoker created");
    }

    /// <summary>
    /// 定时器回调方法，将当前状态信息添加到输出列表。
    /// </summary>
    /// <param name="state">定时器传递的状态对象。</param>
    private void OnTimeInterval(object? state)
    {
        output.Add($"{state}");
    }

    /// <summary>
    /// 获取所有记录的输出信息。
    /// </summary>
    /// <returns>包含所有输出信息的列表。</returns>
    public IList<string> GetOutput()
    {
        return output;
    }
}
